if(!window.console){
	window.console = function(){
		return false;
	}
}
//VARIABLE DE FUNCIONALIDAD DEL SISTEMA
var systemFunctions = {
	cambiarUbicacion: true,
	//habilita la funcionalidad de cambiar de almacen en las paginas diferencites a home
	actualizarPaginasOnCambiarUbicacion: false,
	//permite actualizar todas las páginas abiertas cuando en una de ellas se cambia de almacen
	buildMenuOffHome: true,
	//permite mostrar el menú flotante en páginas diferentes a home
	esperarAjax: true,
	//habilita la validación de llamadas ajax pendientes en la página
	reemplazarMensajesCake: true,
	//reemplaza el mensaje por defecto de cake por una ventana flotante
	cambiarPlanilla: true,
	//habilita la funcionalidad de cambiar de clase y tipo de planilla en las paginas diferencites a home
	actualizarPaginasOncambiarPlanilla: false, //permite actualizar todas las páginas abiertas cuando en una de ellas se cambia de planilla
	hidePanelsOnResize: true
};

//VARIABLES DE ENTORNO

var actual_search_obj = ''; //almacena el id del objeto de busqueda actual
var shortcuts_assigned = false; //indica que los shortcuts han sido asignados

//OPTIMIZANDO TYPEOF CON TYPE.OF
//devuelve el nombre del constructor del objeto. es más especifico que typeof
//uso:
//			type.of('texto');		//string
//			type.of(123);			//number
//			type.of(null);			//null
//			type.of();				//undefined
//			type.of({});			//object
//			type.of([]);			//array
//			type.of(/^b/);			//regexp
//			type.of(alert());		//function
var _type = {
	of: function(obj) {
		var type = typeof(obj);
		if (type == 'object') {
			if (obj === null) {
				return 'null';
			} else if (obj.constructor.toString().match(/regexp/i) !== null) {
				return 'regexp';
			} else if (obj.constructor.toString().match(/date/i) !== null) {
				return 'date';
			} else if (obj.constructor.toString().match(/html/i) !== null) {
				return 'html';
			} else if (obj.constructor.toString().match(/array/i) !== null && typeof(obj.length) != 'undefined') {
				return 'array';
			} else {
				return 'object';
			}
		} else {
			return type;
		}
	}
};
var type = _type;

/*---------------------------------FUNCIONES VARIAS------------------------------------*/

/*
*funcion para obtener todos los inputs que concuerden con la especificación de nombres de CakePHP
*@param (paramarray string)|(string)  si es string => nombres separados por espacios, comas o punto y comas, si es paramarray separados por comas
*@returns (jQuery Object) lista inputs coincidentes con las especificaciones de nombre
*@example:
*    $cake('Ingreso.numero_documento, Ingreso.descarga').css('color','red')
*    $cake('numero_documento; descarga salida_automatica').filter(':visible')
*    $cake('numero_documento','Ingreso.descarga').val('')
* */
$cake = function(){
    items = [];
    for(i=0,j=arguments.length; i<j; i++){
        more_args = arguments[i].split(/[ ,;]/g);
        for(k=0,l=more_args.length; k<l; k++){
            items.push(more_args[k]);
        }
    }
    $items = [];
    for(i=0,j=items.length; i<j; i++){
        filter = ':input[name*=\[' + items[i].split('.').join('\]][name*=\[') + '\]]';
        found = $(filter);
        for(k=0,l=found.length; k<l; k++){
            $items.push(found[k]);
        }
    }
    return $($items);
};

/*
*extension para jQuery que busca elementos creados con especificación de nombramiento de CakePHP
*la funcion hace lo mismo que $cake, pero agrupado en un mismo parent()
*@example:
*   $('#ingreso_detalle tbody').cake('cantidad Ingreso.costo');
*   //es equivalente a
*   $('input[name*=\[cantidad\]], input[name*=\[Ingreso\]][name*=\[costo\]]','#ingreso_detalle tbody');
**/
$(function(){
	$.fn.cake = function(){
		if(!arguments.length) return null;
		items = [];
		
		for(i=0,j=arguments.length; i<j; i++){
			more_args = arguments[i].split(/[ ,;]/g);
			for(k=0,l=more_args.length; k<l; k++){
				items.push(more_args[k]);
			}
		}
		
		$items = [];
		for(i=0,j=items.length; i<j; i++){
			filter = ':input[name*=\[' + items[i].split('.').join('\]][name*=\[') + '\]]';
			found = $(filter, this);
			for(k=0,l=found.length; k<l; k++){
				$items.push(found[k]);
			}
		}
		
		return $($items);
	};
})

function precision(valor, decimal) {
	valor = valor - 0;
	decimal = decimal || 2;
	if (!valor) valor = 0;
	return parseFloat(valor).toFixed(decimal);
}

function random(start, end) {
	if (typeof(end) == 'undefined') {
		end = start;
		start = 0;
	}
	return Math.floor(Math.random(end - start) * (end + 1));
}

//se puede pasar fechas del tipo dd/mm/yy o dd-mm-yy o Date

function IGVFecha(fecha) {
	if (typeof fecha == 'string') {
		if (fecha.indexOf('/') > -1) fecha = fecha.to_date('dd/mm/yy');
		else
		fecha = fecha.to_date('dd-mm-yy');
	}
	limite = '01/03/2011'.to_date('dd/mm/yy');

	return limite.dateCompare(fecha) <= 0 ? 0.18 : 0.19;
}

//obtiene las variables de url
//ejemplo http://blablalba.com?var1=2&var2=45&var3=hola
//{'var1':'2','var2':'45','var3':'hola'}

function getUrlVars() {
	var vars = [],
		hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for (var i = 0; i < hashes.length; i++) {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

function remoteview(el){
    $el = $(el).filter('a');
    el = $el[0];
    titulo = el.title||$el.text();
    href = el.href;
	
    window.remoteview_dialog = $('\
			<div class="remoteview_content">\
				<center>\
					<h2 class="ui-widget-header ui-state-active ui-corner-all">Cargando...</h2>\
					<img src="'+ _WEB_ROOT +'img/ajax2_1.gif" alt="cargando..." />\
				</center>\
			</div>').dialog({
        width: 300,
        title: titulo,
        height: 'auto',
        position: 'center',
        open:function(){
            dialogo = $(this);
            if($el.data('remoteview_page')){
				dialogo.html( $el.data('remoteview_page') );
				dialogo.dialog('option','width','auto');
				dialogo.parent().width('auto');
				dialogo.dialog('option','position','center');
			} else {
				window.remoteview_xhr = $.get(href, function(data){
					dialogo.html(data);
					dialogo
						.find('h2, legend:first').addClass('ui-widget-header ui-state-active ui-corner-all').end()
						.find('.actions,:button,a>img,:submit,.lnkbutton,.cake-sql-log').remove();
					dialogo.find('input:text,textarea').each(function(){
						$(this).replaceWith('<span>'+ this.value +'</span>');
					});
					dialogo.find('input:checkbox').each(function(){
						$(this).replaceWith('<span>'+ $(this).is(':checked')?'SI':'NO' +'</span>');
					});
					dialogo.find('select').each(function(){
						$this = $(this);
						$this.replaceWith('<span>'+$this.find('option:selected').text()+'</span>');
					});
					$flash = dialogo.find('#flashMessage, div.message');
					
					if ($flash.length) {
						$flash.hide();
						show_flash();
					}
					
					$el.data('remoteview_page', dialogo.html());
					//width se carga de aqui por el tiempo en que demora el ajax en cargar.
					dialogo.parent().width('auto');
					dialogo.dialog('option','position','center');
				});
			}
        },
		buttons:{
			Cerrar:function(){
				if(window.remoteview_xhr){
					window.remoteview_xhr.abort();
				}
				$(this).dialog('close');
			},
			'Ir al Documento':function(){
				location = href;
			},
			'Imprimir':function(){
				$(this).print();
			}
		},
        close:function(){
            $(this).dialog('destroy').remove();
        }
    });
    return false;
}

$(function(){
	$('.remoteview').live('click.remoteview', function(e){
		e.preventDefault();
		remoteview(this);
	});
});

//EXTENSIONES AJAX
//serializar objetos de formulario a json
$.fn.serializeObject = function() {
	var o = {};
	var a = this.serializeArray();
	$.each(a, function() {
		if (o[this.name]) {
			if (!o[this.name].push) {
				o[this.name] = [o[this.name]];
			}
			o[this.name].push(this.value || '');
		} else {
			o[this.name] = this.value || '';
		}
	});
	return o;
};

//serializar cualquier lista de objetos
$.fn.serializeThis = function() {
	return $(this).find('[name]:input').clone().wrap('<form>').serialize();
};

//sumar los valores que tienen los inputs
$.fn.sum = function(){
	suma_total = 0;
	$(this).filter(':input').each(function(){
		suma_total = parseFloat((suma_total + (parseFloat(this.value||0))).toPrecision(12));
		//suma_total = ((suma_total*1000000) + (parseFloat(this.value||0*1000000)))/1000000;
	})
	return suma_total;
};

$.fn.print = function(){
	// first element in the collection.
	if (this.size() > 1){
		this.eq( 0 ).print();
		return;
	} else if (!this.size()){
		return;
	}
 
	// Create a random name for the print frame.
	var strFrameName = ("printer-" + (new Date()).getTime());
 
	// Create an iFrame with the new name.
	var jFrame = $( "<iframe name='" + strFrameName + "'>" );
 
	// Hide the frame (sort of) and attach to the body.
	jFrame
		.css( "width", "1px" )
		.css( "height", "1px" )
		.css( "position", "absolute" )
		.css( "left", "-9999px" )
		.appendTo( $( "body:first" ) )
	;
 
	// Get a FRAMES reference to the new frame.
	var objFrame = window.frames[ strFrameName ];
 
	// Get a reference to the DOM in the new frame.
	var objDoc = objFrame.document;
 
	// Grab all the style tags and copy to the new
	// document so that we capture look and feel of
	// the current document.
 
	// Create a temp document DIV to hold the style tags.
	// This is the only way I could find to get the style
	// tags into IE.
	var jStyleDiv = $( "<div>" ).append(
		$( "style, head link" ).clone()
		);
	var d = new Date(),
		curr_date = d.getDate(),
		curr_month = d.getMonth(),
		curr_year = d.getFullYear(),
		curr_hour = d.getHours(),
		curr_minutes = d.getMinutes(),
		curr_secs = d.getSeconds(),

	date = curr_date + "/" + curr_month + "/" + curr_year;
	time = curr_hour + ':' + curr_minutes + ':' + curr_secs;
	// Write the HTML for the document. In this, we will
	// write out the HTML of the current element.
	objDoc.open();
	objDoc.write( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" );
	objDoc.write( "<html>" );
	objDoc.write( "<body>" );
	objDoc.write( "<head>" );
	objDoc.write( "<title>" );
	objDoc.write( document.title );
	objDoc.write( "</title>" );
	objDoc.write( jStyleDiv.html() );
	objDoc.write( "</head>" );
	objDoc.write(
				 '<table cellpadding="0" cellspacing="0" border="0" width="100%">\
					<thead><tr valign="top"><th align="left">Corporación ADC SAC</th><th align="right">Fecha: '+ date +'<br>Hora :'+ time +'</th></tr>\
					<tr><th colspan="2"><hr ></th></tr>\
					</thead><tbody><tr><td colspan="2">'+
				 this
				 .clone()
					.find('.ui-corner-all,.ui-widget-header,.ui-widget-highlight,.ui-widget-content,.ui-state-active,.ui-state-hover,.ui-state-default')
					.removeClass('ui-corner-all ui-widget-header ui-widget-highlight ui-widget-content ui-state-active ui-state-hover ui-state-default')
					.end()
				 .html()
				 +
				 '</td></tr></tbody>\
				 <tfoot><tr><th colspan="2" align="center"><p /><hr>Tacna - Perú</th></tr></tfoot>\
				 </table>'
				);
	objDoc.write( "</body>" );
	objDoc.write( "</html>" );
	objDoc.close();
 
	// Print the document.
	objFrame.focus();
	objFrame.print();
 
	// Have the frame remove itself in about a minute so that
	// we don't build up too many of these frames.
	setTimeout(
		function(){
			jFrame.remove();
		},
		(60 * 1000)
		);
}

//AGREGANDO SOPORTE PARA INDEXOF (IE)
if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(elt /*, from*/ ) {
		var len = this.length;

		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0) from += len;

		for (; from < len; from++) {
			if (from in this && this[from] === elt) return from;
		}
		return false;
	};
}

$(function(){
	$.fn.values = function(){
		var valus = [];
		for(var i=0,j=this.length; i<j; i++){
			if($(this[i]).is(':input'))
				valus.push(this[i].value);
		}
		
		return valus;
	};
})

//CAMELCASE TIPO CAKE
//cambiar texto de tipo 'usuario_id' a 'Usuario Id'
//uso:
//		'texto_cualquiera'.toCamel()	-->		'TextoCualquiera'
String.prototype.toCamel = function() {
	return this.replace(/(^[a-z]|\_[a-z])/g, function($1) {
		return $1.toUpperCase().replace('_', ' ');
	});
};
//SOPORTE TRIM PARA NAVEGADORES DESCONTINUADOS
String.prototype.trim = function() {
	return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
};
//CADENA INICIA CON
String.prototype.startsWith = function(str) {
	return (this.match("^" + str) == str);
};
//CADENA TERMINA EN
String.prototype.endsWith = function(str) {
	return (this.match(str + "$") == str);
};
//CADENA CONTIENE
String.prototype.contains = function(str) {
	return (this.match(str) == str);
};
//CAMELCASE A SEPARACION POR _
//cambia texto en camelcase a texto separado por _
//uso:
//		'TextoEnCamelcase'.toUnderscore()		-->		'texto_en_camelcase'
String.prototype.toUnderscore = function() {
	return this.replace(/([A-Z])/g, function($1) {
		return "_" + $1.toLowerCase();
	}).replace(/^\_/, '').replace(/\s/g, '');
};
// REPITE UNA CADENA TANTAS VECES
String.prototype.repeat = function(count) {
	var value = '';
	for ($i = 1; $i <= count; $i++) {
		value += this;
	}
	return value;
};
//mostrar una cadena codificada con htmlentities de php
String.prototype.unescapeHtml = function () {
    var temp = document.createElement("div");
    temp.innerHTML = this;
    var result = temp.childNodes[0].nodeValue;
    temp.removeChild(temp.firstChild);
    return result;
};

//trunca los decimales de un numero sin redondear
Number.prototype.toPrecisionDecimal = function(decimals){
    return this.toString().replace(/\.\d*/,function(i){return i.substr(0,decimals+1);})-0;
}

//CONVERSIONES
if ($.fn.datepicker) {
	//CONVERTIR TEXTO EN FECHA
	String.prototype.to_date = function(format) {
		return $.datepicker.parseDate(format, this);
	};
	//CONVERTIR FECHA EN TEXTO
	Date.prototype.to_string = function(format) {
		return $.datepicker.formatDate(format, this);
	};
}
//COMPARACION DE FECHAS
//-1 = menor
//0 = igual
//1 = mayor
Date.prototype.dateCompare = function(otherDate) {
	//-1 0 1 = menor igual mayor
	uno = Math.ceil(this.getTime() / (1000 * 60 * 60 * 24));
	dos = Math.ceil(otherDate.getTime() / (1000 * 60 * 60 * 24));
	if (uno == dos) return 0;
	if (uno < dos) return -1;
	else
	return 1;
};
//SUMAR FECHAS
Date.prototype.dateAdd = function(numero) {
	return new Date(this.setDate(this.getDate() + numero));
};
//extension para objeto datepicker y obtener la fecha seleccionada
$(function(){
	if($.fn.datepicker){
		$.fn.date = function(formatIn){
			if(!this.hasClass('hasDatepicker') || this.val() == '00/00/0000') return null;
			if(typeof formatIn == 'undefined') formatIn = 'dd/mm/yy';
			return this.val().to_date(formatIn);
		};
		$.fn.dateAdd = function(days,formatIn){
			if(!this.hasClass('hasDatepicker') || this.val() == '00/00/0000') return null;
			return this.date(formatIn).dateAdd(days);
		};
		$.fn.dateFormat = function(formatIn, formatOut){
			if(!this.hasClass('hasDatepicker') || this.val() == '00/00/0000') return null;
			if(typeof formatIn == 'undefined') formatIn = 'dd/mm/yy';
			if(typeof formatOut == 'undefined') formatOut = 'dd/mm/yy';
			return this.date(formatIn).to_string(formatOut);
		};
		$.fn.compareTo = function(objTo,formatIn){
			if(typeof objTo == 'undefined') return null;
			if(!this.hasClass('hasDatepicker') || this.val() == '00/00/0000') return 0;
			$objTo = $(objTo).filter('.hasDatepicker');
			if(!$objTo.length || $objTo.val() == '00/00/0000') return 0;
			return this.date(formatIn).dateCompare($objTo.date(formatIn));
		};
		$.fn.isDate = function(format){
			if(!this) return false;
			if(!$(this).val().trim()) return false;
			if($(this).val() == '00/00/0000') return false;
			if($(this).date(format)) return true;
			return false;
		};
	}
});
/* 
//muestra la pantalla en negro con loader para pasar de una página a otra... 
//el tiempo prudente para desaparecer el loader en caso que no haya cambio de pagina
function fake_ajax(tiempo){
		$div = $('<div id="ajax_fake_loader"></div>')
				.css({
						width:$(document).width(), height:$(document).height(), position: 'absolute',top: '0px',left: '0px', 'z-index':'99999','background-color': 'black',
						'filter':'alpha(opacity=70)','-moz-opacity':'0.7','-khtml-opacity': '0.7','opacity': '0.7',
						'text-align':'center',color: 'white', 'font-weight':'bolder', 'font-size':'2em', padding:'200px'})
				.html('<img src="'+_WEB_ROOT+'img/ajax3.gif" alt="cargando..."/><br /><span>cargando...</span>')
				.appendTo('body');
		setTimeout(function(){
				$('div#ajax_fake_loader').remove();
				},tiempo?tiempo:3000);
}  
*/

//establece el objeto con focus inicial
/*
start_input(string_selector)
start_input(jquery_obj);
start_input($el, true);
start_input($el, {opciones});
*/

function start_input($el, opciones) {
	var _default = {
		'reindex_first': true,
		'rebind_shortcuts': true,
		'is_search_obj': false
	};

	if (typeof $el == 'string') {
		$el = $($el);
		if (!$el.length) return false;
	}

	if (typeof opciones == 'boolean' && opciones) {
		opc = _default;
		opc.is_search_obj = true;
	} else if (typeof opciones == 'object') {
		opc = $.extend({}, _default, opciones);
	} else {
		opc = _default;
	}


	if (opc.reindex_first) {
		reindex_inputs();
	}

	if (opc.rebind_shortcuts) {
		shortcut_rebind(true);
	}

	if (opc.is_search_obj) {
		actual_search_obj = $el.attr('id');
	}
	$el.focus();
	$el.select();
}

/*
parseDate
valida y formatea una fecha

(String)date = fecha a evaluar, puede tener varios formatos:
	dd/mm/yyyy
	dd/mm/yy
	dd/mm
(String)separatorIn = caracter que contiene el separador de fecha de ingreso, por defecto se toma '/'
(String)separatorOut = caracter que contiene el separador de fecha de salida, por defecto se toma el separador de entrada
*/

function parseDate(date, separatorIn, separatorOut) {
	var fecha;
	separatorIn = typeof separatorIn == 'undefined' ? '/' : separatorIn.trim();
	separatorOut = typeof separatorOut == 'undefined' ? separatorIn : separatorOut.trim();

	date = date.trim();

	if ((date.indexOf(separatorIn) > -1) && (separatorIn.length == 1) && (separatorIn != '/')) {
		date = date.replace(eval('/' + separatorIn + '/g'), '/');
	}

	if (date.length == 0 || typeof date == 'undefined') {
		fecha = new Date();
	} else {
		try {
			//  dd/mm/yyyy
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))\/((19[0-9]{2})|(2[0-1][0-9]{2}))$/.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm/yy', date);
			}
			//  dd/mm/yy
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))\/[0-9]{2}$/.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm/y', date);
			}
			//  dd/mm
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))$/.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm', date);
			}
		} catch (e) {
			return false;
		}
	}

	return typeof fecha == 'undefined' ? false : $.datepicker.formatDate('dd' + separatorOut + 'mm' + separatorOut + 'yy', fecha);
}

//INFORMACION DE LA PAGINA ACTUAL
if (typeof window._WEB_ROOT !== 'undefined') {
	actual = location.href.replace(_WEB_ROOT, '');
	//CONTROLLER
	location.controller = actual.split(/\//)[0].toCamel().replace(/\s/g, '') || 'Home';
	//ACTION
	location.action = actual.split(/\//)[1] || 'index';
	//PARAMS
	location.params = {};
	//URLPARAMS
	url_params = actual.split('?')[1] || '';
	if (url_params) {
		pair = url_params.split('&');
		location.params.url = {};
		for (i = 0, j = pair.length; i < j; i++) {
			location.params.url[pair[i].split('=')[0]] = pair[i].split('=')[1] || ' ';
		}
	}
	//CONTROLLER PARAMS
	test = actual.replace('?' + url_params, '');
	controller = actual.split(/\//)[0] || '';
	location.params.method_vars = [];
	if (controller) {
		test = test.substr(controller.length + 1);
		if (test.split('/').length) {
			test = test.replace(test.split('/')[0], '').replace('/', '');
			if (test.split('/').length) {
				test = test.split('/');
				for (i = 0, j = test.length; i < j; i++) {
					location.params.method_vars[i] = test[i];
				}
			}
		}
	}

	//CAKE PAGE TYPE
	location.is_addPage = location.action.toLowerCase() === 'add';
	location.is_indexPage = location.action.toLowerCase() === 'index';
	location.is_editPage = location.action.toLocaleLowerCase() === 'edit';
	location.is_viewPage = location.action.toLocaleLowerCase() === 'view';

}


/*-----------------------------------SISTEMA DE ALERTAS--------------------------*/
//MENSAJES DE TIPO MODAL
//uso: msg(mensaje, titulo, icono)
//lista de iconos: http://jqueryui.com/themeroller/

function msg(mensaje, titulo, ui_icon) {
	if (mensaje == '') {
		return;
	}
	titulo1 = '';
	if (titulo) {
		titulo1 = ' : ' + titulo;
	}
	icono = '';
	if (ui_icon) {
		icono = '<span style="float: left; margin: 0pt 7px 50px 0pt;" class="ui-icon ' + ui_icon + '"></span>';
	}
	$('<div><p>' + icono + '' + mensaje + '</p></div>').dialog({
		'title': 'SCMC' + titulo1,
		'buttons': {
			'cerrar': function() {
				$(this).dialog("close");
			}
		}
	});
}

//MENSAJES DE TIPO ALERTA
//uso: 	alerta(mensaje, titulo)
//		alerta(mensaje, tipo)
//		alerta(mensaje)
//		alerta(mensaje, titulo, tiempo, tipo)
//		alerta(mensaje, titulo, tiempo)
//		alerta(mensaje, titulo, tipo)
//		alerta(mensaje, tiempo)

function alerta(mensaje, titulo, tiempo, tipo) {
	icon = _WEB_ROOT + 'img/logo_mini.gif';

	function choose_icon(type) {
		switch (type.toUpperCase()) {
		case 'SUCCESS':
			icon = _WEB_ROOT + 'img/icons/flash/success.png';
			break;
		case 'ERROR':
		case 'CRITICAL':
			playSound('error');
			icon = _WEB_ROOT + 'img/icons/tooltip/Critical.png';
			break;
		case 'HELP':
			icon = _WEB_ROOT + 'img/icons/tooltip/Help.png';
			break;
		case 'INFO':
			icon = _WEB_ROOT + 'img/icons/tooltip/Info.png';
			break;
		case 'WARNING':
			icon = _WEB_ROOT + 'img/icons/tooltip/Warning.png';
			break;
		default:
			icon = _WEB_ROOT + 'img/logo_mini.gif';
		}
	}

	if (typeof titulo == 'undefined' || titulo.length == 0) {
		titulo = 'SCMC';
	}

	if (typeof titulo == 'number') {
		tiempo = titulo;
		titulo = 'SCMC';
	} else {
		choose_icon(titulo);
		if ('CRITICAL HELP INFO WARNING'.indexOf(titulo.toUpperCase()) > -1) {
			titulo = 'SCMC';
		}
	}

	if (typeof tiempo == 'string') {
		choose_icon(tiempo);
		tiempo = 3000;
	} else {
		tiempo = tiempo || 3000;
	}

	if (tipo) {
		choose_icon(tipo);
	}

	return $.gritter.add({
		title: titulo,
		text: mensaje,
		image: icon,
		fade_in_speed: 'medium',
		// how fast notifications fade in (string or int)
		fade_out_speed: 2000,
		// how fast the notices fade out
		// sticky: true, // para que el mensaje se quede permanente
		time: tiempo // hang on the screen for...
	});
}


/*
*@param     {string|object}   optionsOrText        mensaje u objeto constructor
*                                                 el objeto por defecto es:
*           {titulo:'SCMC::confirmar', pregunta :'', icono:'', tiempo:9000, callback:null}
*@param     {function}        callback(response)   funcion a ejecutar después de hacer click en un botón
*                                                 response devuelve 1 o 0 dependiendo del botón presionado
*@returns   {$.gritter}       objeto jQuery.gritter para borrar o ajustar propiedades manualmente
*@example:
*           $borrado = confirma('seguro desea eliminar el registro?', function(rpta){
*              if(rpta ==)
*           })
**/
function confirma(mensaje, titulo, metodo){   
    if(!titulo){
        titulo = 'SCMC';
    }
    if(typeof titulo == 'number'){
        metodo = titulo;
        titulo = 'SCMC';
    }
    if(typeof titulo == 'function'){
        metodo = titulo;
        titulo = 'SCMC';       
    }
    
    var div = $(document.createElement('div')).attr('id','mensaje-confirmar').html(mensaje);
    $(div).dialog({
            resizable: false,
            height:140,
            modal: true,
            buttons: {
                'Aceptar': function() {
                    $(this).dialog('close');   
                    metodo();   
                },
                'Cancelar': function() {
                    $(this).dialog('close');
                }
            }
        });
}

/*
//MENSAJES DE CONFIRMACION
//uso: 	confirma(mensaje, titulo, callback)
//		confirma(mensaje, callback) //el título será SCMC:.
function confirma(mensaje, titulo, callback){
		if(!mensaje.length){
				alerta('No se estableció el mensaje de confirmación', 'Error de javascript');
				return;
		}
		if(typeof titulo == 'function'){
				callback = titulo;
				titulo = 'SCMC:';
		}
		if(typeof callback != 'undefined' && typeof callback != 'function'){
				alerta('No se ha establecido la función de retorno', 'Error de javascript');
				return;
		}

		$('<div><p>'+mensaje+'</p></div>')
				.dialog({
						'title':titulo,
						'buttons':{
								'Cancelar':function(){
									$(this).dialog("close");
								},
								'No':function(){
									if (typeof callback != 'undefined')
										callback(false);
									$(this).dialog("close");
								},
								'Si':function(){
									if (typeof callback != 'undefined')
										callback(true);
									$(this).dialog("close");
								}
						},
						'close':function(){
								$(this).dialog('destroy');
						}
		});
} */
//mostrar el mensaje CAKE como modal

function show_flash() {
	$mensaje = $('#flashMessage, div.message');
	if ($mensaje.length) {
		for (var i = 0, j = $mensaje.length; i < j; i++) {
			$msg = $mensaje.eq(i);
			
			if($msg.hasClass('msg-info')){
				alerta($msg.html(), 'SCMC', 'info');
			} else if($msg.hasClass('msg-success')){
				alerta($msg.html(), 'SCMC', 'success');
			} else if($msg.hasClass('msg-warning')){
				alerta($msg.html(), 'SCMC', 'warning');
			} else if($msg.hasClass('msg-error')){
				alerta($msg.html(), 'SCMC', 'error');
			} else {
				alerta($mensaje[i].innerHTML, 'SCMC');
			}
		}
	}
}

$(function() {
	//DESAPARECER MENSAJE FLASH DE CAKE
	//uso: se carga automáticamente
	//mostrando alerta de CAKEPHP como modal
	if (systemFunctions.reemplazarMensajesCake) {
		$flash = $('#flashMessage, div.message');
		
		if ($flash.length) {
			$flash.hide();
			show_flash();
		}

		contador = '0';
		if ($flash.length) {
			contador = $flash.length.toString().blink();
		}
		$messages = $('<div id="messages" style="float: right; margin: 0px 3px 3px; cursor: pointer;" class="ui-state-default ui-widget-content ui-corner-all"><span class="ui-icon ui-icon-mail-closed" style="float:left"></span><span style="float:left">' + contador + '</span></id>').click(function() {
			show_flash();
			$(this).find('blink').replaceWith(function() {
				return this.innerHTML;
			});
		}).hover(

		function() {
			$(this).addClass('ui-state-hover');
		}, function() {
			$(this).removeClass('ui-state-hover');
		});
		$('#navigator').append($messages);
	}
}); /*------------------------------------------------------------------------------------*/

/*-----------------------------SHORTCUTS---------------------------------*/
var shortcuthint,
//AGREGANDO SHORTCUTS GLOBALES
search_objs = 'input:text + img[src*=search.png], input:text + a.lnk_buscar, input:text + a.lnk_info, input:text + a:has(img[src*=search.png]), :text + .error-message + a:has(img[src$=search.png])',
	//RESERVANDO SHORTCUTS PARA LA APLICACION
	shortcuts = {
		'Ctrl+R': {
			'accion': 'Cancelar y regresar a la página anterior',
			'objs': 'div.actions a.lnkbutton.btnback, a.lnkbutton.btncancel',
			'callback': function() {
				if ($('div.actions a.lnkbutton.btnback:first, div.actions a.lnkbutton.btncancel:first').length) {
					window.location = $('div.actions a.lnkbutton.btnback:first, div.actions a.lnkbutton.btncancel:first').attr('href');
				} else {
					return;
				}
			}
		},
		'Ctrl+G': {
			'accion': 'Guardar datos',
			'objs': ':input:submit[value=Guardar]',
			'callback': function() {
				actual_search_obj = '';
				$('form :input:submit[value=Guardar]:last').click();
				return false;
			}
		},
		'Ctrl+M': {
			'accion': 'Guardar datos',
			'objs': '#textMenu',
			'callback': function() {
				$('#textMenu').focus();
				return false;
			}
		},
		'Ctrl+L': {
			'accion': 'Limpiar datos del formulario',
			'objs': 'form :input:reset',
			'callback': function() {
				if ($('form :input:reset:first').length) {
					$('form :input:reset:first').click();
				} else {
					return;
				}
			}
		},
		'Ctrl+N': {
			'accion': 'Nuevo registro',
			'objs': 'div.actions a:contains(Nuevo), div.stdactions a:contains(Nuevo)',
			'callback': function() {
				if ($('div.actions a:contains(Nuevo):first, div.stdactions a:contains(Nuevo):first').length) {
					window.location = $('div.actions a:contains(Nuevo):first, div.stdactions a:contains(Nuevo):first').attr('href');
				} else {
					return;
				}
			}
		},
		'Ctrl+D': {
			'accion': 'Borrar registros',
			'objs': 'div.actions :input:submit.btnerase, div.actions a.btnerase, div.stdactions a.btnerase:first',
			'callback': function() {
				btn = $('div.actions :input:submit.btnerase:first, div.stdactions a.btnerase:first');
				if (btn.length) {
					btn.click();
				} else {
					if ($('div.actions a.btnerase:first, div.stdactions a.btnerase:first').length) {
						window.location = $('div.actions a.btnerase:first, div.stdactions a.btnerase:first').attr('href');
					} else {
						return;
					}
				}
			}
		},
		'Ctrl+A': {
			'accion': 'Anular registros',
			'objs': 'div.actions :input:submit.btncancel',
			//, div.actions a.btncancel',
			'callback': function() {
				btn = $('div.actions :input:submit.btncancel:first');
				if (btn.length) {
					btn.click();
				} else {
					if ($('div.actions a.btncancel:first').length) {
						window.location = $('div.actions a.btncancel:first').attr('href');
					} else {
						return;
					}
				}
			}
		},
		'Ctrl+P': {
			'accion': 'Imprimir documento',
			'objs': 'div.actions a:contains(Imprimir), div.stdactions a:contains(Imprimir)',
			'callback': function() {
				if ($('div.actions a:contains(Imprimir):first, div.stdactions a:contains(Imprimir):first').length) {
					window.location = $('div.actions a:contains(imprimir):first, div.stdactions a:contains(Imprimir):first').attr('href');
				} else {
					return;
				}
			}
		},		
		'Ctrl+E': {
			'accion': 'Imprimir documento',
			'objs': 'div.actions a:contains(Editar), div.stdactions a:contains(Editar)',
			'callback': function() {
				if ($('div.actions a:contains(Editar):first, div.stdactions a:contains(Editar):first').length) {
					window.location = $('div.actions a:contains(Editar):first, div.stdactions a:contains(Editar):first').attr('href');
				} else {
					return;
				}
			}
		},
		'Ctrl+left': {
			'accion': 'Ver Documento Anterior',
			'objs': 'a.lnkbutton.btnprev',
			'callback': function() {
				$lnkButton = $('.lnkbutton.btnprev');
				if(window.ajaxNavigator){
					$lnkButton.click();
				} else {
					url = $lnkButton.attr('href');
					location = url;
				}
			}
		},
		'Ctrl+right': {
			'accion': 'Ver Documento Siguiente',
			'objs': 'a.lnkbutton.btnnext',
			'callback': function() {
				$lnkButton = $('.lnkbutton.btnnext');
				if(window.ajaxNavigator){
					$lnkButton.click();
				} else {
					url = $lnkButton.attr('href');
					location = url;
				}
			}
		},
		'F1': {
			'accion': 'Ayuda del sistema (<a href="' + 'http://192.168.1.250/wiki' + '" target="_blank"><b>Ver Wiki</b></a>)',
			'objs': '',
			'callback': function() {
				$('#help_dialog').dialog('open');
			}
		},
		'CTRL+B': {
			'accion': 'Buscar registro',
			'objs': '',
			'callback': function() {
				$('div.filterbox input:first').focus();
			}
		},
		'F3': {
			'accion': 'Abrir búsqueda en campos hábiles',
			'objs': search_objs,
			'callback': function() {
				if (actual_search_obj) {
					if ($('#' + actual_search_obj).data('searchButton')) {
						button = $('#' + actual_search_obj).data('searchButton');
						$button = $('#' + button);
						if ($button.length) {
							$button.trigger('click');
							return;
						}
					}
					selector = '#[obj] + img[src*=search.png]:first, #[obj] + a.lnk_buscar:first, #[obj] + a.lnk_info:first,';
					selector += '#[obj] + a:has(img[src*=search.png]), #[obj] + .error-message + a:has(img[src$=search.png])';
					selector = selector.replace(/\[obj\]/g, actual_search_obj);
					$selector = $(selector).trigger('click');
				}
			}
		}
	};
//(RE)ASIGNANDO SHORTCUTS
$(function() {
	$(':text').live('focusin.enter_input_fix focusout.enter_input_fix', function(e) {
		//$search_inputs = $(search_objs).prev(':text');
		$search_inputs = $(search_objs).prevAll(':text');
		$input = $search_inputs.filter($(this));

		if ($input.length) {
			switch (e.type) {
			case 'focusin':
				actual_search_obj = this.id;
				break;
			case 'focusout':
				actual_search_obj = '';
				break;
			}
		}
	});
});
//force_rebind	(bool:false) indicador para forzar reasignacion de shortcuts

function shortcut_rebind(force_rebind) {
	var pass = false;

	if (!shortcuts_assigned) {
		pass = true;
	} else if (typeof force_rebind == 'boolean' && force_rebind) {
		pass = true;
	}

	if (pass) if (typeof shortcut == 'object') {
		//verificando si existe la variable _shortcuts
		if (typeof _shortcuts == 'object') {
			shortcuts = $.extend({}, shortcuts, _shortcuts);
		}


		//QUITANTO LOS ATAJOS ACTUALES
		for (var i in shortcut.all_shortcuts) {
			shortcut.remove(i);
		}

		//AYUDA DEL SISTEMA
		$hdialog = $('#help_dialog');
		if ($hdialog.length) $hdialog.remove();

		$hdialog = $('<div id="help_dialog" style="display:none" />');
		var count = 0;
		for (var i in shortcuts) {
			if (shortcuts[i].oculto) {
				shortcut.add(i, shortcuts[i].callback);
				continue;
			} else if (shortcuts[i].objs != '' && $(shortcuts[i].objs).length == 0) continue;
			shortcut.add(i, shortcuts[i].callback);
			valor = '<li><b>(' + i + ')</b> ' + shortcuts[i].accion + '</li>';
			$hdialog.append(valor);
			count++;
			try {
				obj = shortcuts[i].objs;
				$(obj).attr('title', function() {
					title = $(this).attr('title');
					//quitando del titulo la ayuda del shortcut
					title = title.replace(/ \([a-zA-z0-9 +]+\)/g, '');
					return (title + ' (' + i + ')').trim();
				});
			} catch (e) {
				//no existe el objeto
				continue;
			}
		}

		//mostrar acceso directo aleatorio
		var rand = random(count - 1),
			p = 0;

		for (var i in shortcuts) {
			if (p == rand) {
				var shortcuthint = 'Pulsa <b>' + i + '</b> para ' + shortcuts[i].accion;
				$('#shortcuthint').html(shortcuthint);
				break;
			}
			p++;
		}

		$hdialog.dialog({
			'autoOpen': false,
			'width': 350,
			'buttons': {
				'Cerrar': function() {
					$(this).dialog('close');
				}
			},
			'position': ['right', 'top'],
			'title': 'SCMC: Ayuda'
		});

		shortcuts_assigned = true;
	}

} /*------------------------------------------------------------------------------------*/

/*------------------------------VALIDACION-------------------------------------------------*/
//VALIDAR FORMULARIOS
//uso: 
//		$('#RuedaCodigo').attr('minlength','5').addClass('notEmpty codigo');
//		$('#RuedaDescripcion').attr('minlength','5').addClass('notEmpty');
//		$('#RuedaKmsCompra').attr('minlength','5').addClass('numero');
//		validar()

function validar() {
	function msg(msg) {
		if (window['alertaValidacion']) {
			$.gritter.remove(window['alertaValidacion']);
		}
		window['alertaValidacion'] = alerta(msg);
	}

	//limpiando errores presentes
	$('input,textarea').bind('focus.validacion.limpiar_error', function() {
		$msg = $(this).parent().removeClass('error').find('div.error-message');
		$msg.remove();
/*
		$msg.fadeTo('slow', 0.01, function(){
			$(this).slideUp('slow',function(){
				$(this).remove();
			});
		});*/
	});

	//quitando focusout a todos los controles de validación
	//en caso que se haya hecho doble llamada a la validacion
	$('input[minlength],textarea[minlength],input.notEmpty,textarea.notEmpty,input.numero,input.decimal,input.fecha,input.codigo').unbind('focusout.validacion');

	//atributo minlength
	$('input[minlength],textarea[minlength]').bind('focusout.validacion.minLength', function() {
		if (this.value.trim().length < $(this).attr('minlength') && this.value.trim().length) {
			$(this).after('<div class="length error-message">longitud minima de ' + $(this).attr('minlength') + ' caracteres</div>');
		}
	});

	//clase notEmpty
	$('input.notEmpty,textarea.notEmpty').bind('focusout.validacion.notEmpty', function() {
		if ($(this).val().trim().length === 0) {
			$(this).before('<div class="notEmpty error-message" title="se requiere este valor"><strong>*</styrong></div>');
		}
	});

	//clase numero
	$('input.numero').bind('focusout.validacion.numero', function() {
		numero = /^(\d{1,14}?)$/;
		if (!numero.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="numero error-message">el valor debe ser numérico</div>');
		}
	});

	//clase decimal
	$('input.decimal').bind('focusout.validacion.decimal', function() {
		numero = /^(\d{1,10}?[.]{0,1}?\d{0,4}?)$/;
		if (!numero.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="numero error-message">el valor debe ser numérico</div>');
		}
	});

	//clase fecha
	$('input.fecha').bind('focusout.validacion.fecha', function() {
		numero = /^(\d{2}?[\/]{1}?\d{2}?[\/]{1}?\d{4}?)$|^(\d{2}?[\-]{1}?\d{2}?[\-]{1}?\d{4}?)$/;
		if (!numero.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="numero error-message">el valor debe ser fecha</div>');
		}
	});

	//clase codigo
	$('input.codigo').bind('focusout.validacion.codigo', function() {
		codigo = /^[a-zA-Z0-9]*$/;
		if (!codigo.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="codigo error-message">el código solo puede tener numeros y letras</div>');
		}
	});

	//clase email
	$('input.email').bind('focusout.validacion.email', function() {
		codigo = /^[a-z0-9._%+\-]+@(?:[a-z0-9\-]+\.)+[a-z]{2,4}$/;
		if (!codigo.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="email error-message">el formato de email es incorrecto</div>');
		}
	});

	//clase telefono
	$('input.telefono').bind('focusout.validacion.telefono', function() {
		codigo = /^((\+?\d{2,3}|\(\d{2,3}\))[\s\-]+){0,2}(\d+){6,11}(\s+\d{2,4})?/;
		if (!codigo.test(this.value) && this.value.trim().length) {
			$(this).after('<div class="telefono error-message">el formato de teléfono es incorrecto</div>');
		}
	});

	//animando los errores
	$('input,textarea').bind('focusout.validacion.animacion', function() {
		$(this).parent().find('div.error-message').hide().fadeIn('slow').end();
	});

	//boton de envio
	$('input:submit.btnsave').bind('click.validacion', function() {
		//verificando que todos los campos requeridos hayan sido satisfechos
		bValidoOk = true;
		$('input.notEmpty,textarea.notEmpty').each(function() {
			if ($(this).val().length === 0) {
				bValidoOk = false;
				if (!$(this).siblings('div.notEmpty').length) {
					$(this).after('<div class="notEmpty error-message">se requiere este valor</div>');
				}
			}
		});
		if (!bValidoOk) {
			msg('hay campos requeridos', 'SCMC dice:');
			return false;
		}

		errores = $('input:submit.btnsave').parents('form').find('div.error-message').length;
		if (errores > 0) {
			msg('tiene ' + errores + ' errores por corregir', 'SCMC dice:');
			return false;
		} else {
			return true;
		}
	});
} /*------------------------------------------------------------------------------------*/
/* //BLOQUEAR PORCIONES DE LA PÁGINA
//bloquea porciones de una página agregando una capa transparente sobre ella
//sintaxis:
//		// blockme(string id_objeto, int tiempo_para_desaparecer=1500, bool usar_imagen_loader)
//		blockme(string id_objeto, int tiempo_para_desaparecer=1500, string imagen a usar)
//uso:
//		blockme('addform')					//bloquea por 1.5 segundos
//		blockme('addform', 5000)			//bloquea por 5 segundos
//		blockme('addform', 4000, true)		//bloquea con imagen loader por defecto por 4 segundos
//		blockme('addform', 4000, 'ajax1.gif')		//bloquea con imagen loader específico por 4 segundos
function blockme(obj, timeout, loader){
		if(typeof obj != 'string'){return false;}

		$obj = $('#'+obj);
		if(!$obj.length){return false;}

		var randomnumber=Math.floor(Math.random()*11);
		if(!timeout){timeout = 1500;}

		if(!loader){loader='';}
		else{
				if(typeof loader === 'string'){
						loader = '<img src="'+_WEB_ROOT+'img/'+ loader +'" />';
				} else {
						loader = '<img src="'+_WEB_ROOT+'img/ajax3.gif" />';
				}
		}
		$blockme = $('<div id="blockme' + randomnumber +'" />')
				.css({
						'text-align'		:	'center',
						'background-color'	:	'#000000',
						'width'				:	$obj.width(),
						'height'			:	$obj.height(),
						'position'			:	'absolute',
						'top'				:	$obj.offset().top,
						'left'				:	$obj.offset().left,
						'filter'			:	'alpha(opacity=70)',
						'-moz-opacity'		:	'0.7',
						'-khtml-opacity'	:	'0.7',
						'opacity'			:	'0.7',
						'z-index'			:	1003,
						'display'			:	'none'
						})
				.html(loader)
				.prependTo($obj)
				.fadeIn('slow',function(){
						setTimeout('unblockme("' +obj+ '")', timeout);
				});
}

//DESBLOQUEAR OBJETOS BLOQUEADOS
//desbloquea objetos que han sido bloqueados
//sintaxis:
//		unblockme(string id_objeto_bloqueado)
//uso:
//		unblockme('addform')
function unblockme(obj){
		$('#'+obj).find('div[id^=blockme]').fadeOut('slow',function(){
				$(this).remove();
		});
} 

//DESBLOQUEAR TODOS LOS OBJETOS BLOQUEADOS
//uso:
//		unblockall()
function unblockall(){
		$('div[id^=blockme]').remove();
}*/

//verifica si los checks dentro de las páginas index han sido seleccionados antes de realizar la petición de envio

function verifica_checks() {
	$lista_chk_borrado = $('input:checkbox', '#resultados tbody');
	flag = true; //override si la página no está dentro de los estándares
	if ($lista_chk_borrado.length) {
		flag = false;
		for (var i = 0, j = $lista_chk_borrado.length; i < j; i++) {
			$chk = $lista_chk_borrado[i];
			if ($chk.checked) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			$.gritter.add({
				// (string | mandatory) the heading of the notification
				title: 'SCMC',
				// (string | mandatory) the text inside the notification
				text: 'Debe seleccionar registros para procesar',
				time: 2000,
				image: _WEB_ROOT + 'img/logo_mini.gif'
			});
			//msg('Debe seleccionar registros para procesar','Información','ui-icon-info');  
		}
	}
	return flag;
}


/*---------------------------FIX PARA TECLAS ----------------------------*/
var tabindex = 1,
	//contedo de objetos indexables
	actualtab = 1,
	//indice actual
	mouse_over_submit = false;

//funcion para reindexar los inputs visibles. (muy util cuando se crean campos en tiempo de ejecucion)
//$inputs = lista de objetos manual
//ejemplos
//	reindex_inputs();			//indexar todos los elementos visibles
//	reindex_inputs($(':text')); //indexar solo campos tipo text
//	reindex_inputs($('#btnGuardar'), true);	//agregar al índice el boton Guardar

function reindex_inputs($inputs, appendToList) {
	$_inputs = $(':input:visible:not(:button,:submit,:reset,[readonly],[disabled],.noindex)');
	if (typeof appendToList == 'boolean' && appendToList === true) {
		$inputs = $_inputs.add($inputs);
	} else if (typeof $inputs == 'undefined' || !$inputs.length) {
		$inputs = $_inputs;
	}

	tabindex = $inputs.length;
	$actual = $('[tabindex]');
	if ($actual.length) {
		$actual.removeAttr('tabindex');
		//quitar el evento focus.index
		$actual.unbind('focus.index');
	}
	for (var i = 0, j = $inputs.length; i < j; i++) {
		$inputs[i].tabIndex = i + 1;
	}
	//asegurando que actualtab esté siempre actualizado
	$inputs.bind({
		'focus.index': function() {
			actualtab = this.tabIndex;
		}
	});
}

function dialog_keypress(e){
    var $dialog = $(e.currentTarget),
        $target = $(e.target),
        $inputs = $target.parents('.ui-dialog:first').find(":input:visible:not(:button,:submit,:reset,[readonly],[disabled],.noindex)"),
        key = e.keyCode || e.wich,
        ctl = e.ctrlKey,
        $sendButton = $dialog.find(':button:contains(Guardar),:button:contains(Enviar),:button:contains(Buscar)').first();
    
	if(key == 13 && !ctl){
        $inputs.each(function(index, input){
            var $input = $(input);
            if($target[0].id && ($target.attr('id') == $input.attr('id')) ||
			   $target[0].name && ($target.attr('name') == $input.attr('name'))
			){
                if(index==$inputs.length-1){
                    $inputs.eq(0).focus();
                } else {
                    $inputs.eq(index+1).focus();
                }
                return false;
            }
        });
    } else if(key == 13 && ctl){
        $sendButton.click();
    }
}

/*
*permite realizar saltos de campo en dialogos presionando
*tecla enter y enviar formulario presionando Ctrl+Enter
*@param {jQuery selector} target  dialogo que se va a seleccionar
*
*@example
*   shortcut_rebind_dialog(  '.ui-dialog:visible'  )
*   shortcut_rebind_dialog(  )
**/
function shortcut_rebind_dialog(target){
    $target = $(target);
    if($target.hasClass('ui-dialog')){
        $target.bind('keypress.button_fix', dialog_keypress);
    } else if($target.parents('.ui-dialog')){
        $target.parents('.ui-dialog').bind('keypress.button_fix', dialog_keypress);
    }
    
}

$(function() {
	reindex_inputs();

	$(document).bind('keydown.enter_fix', function(e) {
		if (!$('.ui-dialog:visible').length) {
			var tecla = (document.all) ? e.keyCode : e.which; // por compatibilidad con IE y Firefox
			var $input_actual = $('[tabindex=' + actualtab + ']');

			switch (tecla) {
				//case 9: //tab
			case 13:
				//enter
				if ($input_actual.attr('type') == 'submit') {
					return true;
				}
				if ($input_actual.parent().children('input:submit[value=Buscar]').length > 0) {
					return true;
				}
				if ($input_actual.attr('id') == 'textMenu') {
					$input_actual.trigger('blur');
					return true;
				}
				
				actualtab++;
				if (actualtab > tabindex) {
					actualtab = 1;
				}

				//ejecutando eventos del control anterior
				eventos = $input_actual.data('events');
				if (eventos['change']) {
					$input_actual.trigger('change');
				}
				if (eventos['blur']) {
					$input_actual.trigger('blur');
				}
				if (eventos['click']) {
					$input_actual.trigger('click');
				}

				$('[tabindex=' + actualtab + ']').focus();
				$('[tabindex=' + actualtab + ']').select();

				//fix para jQuery.adcReport
				test = $('#adc_report:visible :input:last');
				if (test.length) {
					$('#adc_report').parents('.ui-dialog:first').find(':button:contains(Ver)').click();
				}

				return false;
				break;
				//default:

			}
		}
	});

	//FIX para bug de plugin buscarProveedor... obliga al submit final a hacer click al presionar enter
	$(':submit[value=Guardar]').bind('click.fix_bp mouseover.fix_bp mouseout.fix_bp', function(e) {
		if (jQuery.buscarProveedor || jQuery.fn.buscarProveedor) {
			switch (e.type) {
			case 'mouseover':
				mouse_over_submit = true;
				break;
			case 'mouseout':
				mouse_over_submit = false;
				break;
			case 'click':
				if (mouse_over_submit) {
					return true;
				} else {
					if (!actual_search_obj) {
						return true;
					} else {
						is_plugin = $('#' + actual_search_obj);
						if (is_plugin.length && is_plugin.hasClass('has_buscar_proveedor')) {
							return false;
						} else {
							return true;
						}
					}
				}
				break;
			}
		}
	});

	// $('input,select,textarea').each(function() {
	// if (this.type != "hidden" && this.type != "submit" && 
	// this.type != "button" && this.type != "reset" &&
	// !$(this).attr('readonly') && $(this).is(':visible') &&
	// !$(this).is(':disabled') ) {
	// $(this).attr("tabindex", tabindex);                
	// tabindex++;
	// }
	// });

	// cambia el tab por enter
/* $(document).keydown(function(e){
		tecla = (document.all) ? e.keyCode : e.which; // por compatibilidad con IE y Firefox
		if (tecla == 13) {
			//verificando si existe un dialogo abierto
			if($('.ui-dialog:visible').length){
					//$('.ui-dialog:visible').find('button:contains(Buscar)').click()
			} else {
				var follow = true, submit = false;
				do{
					var obj = $("[tabindex=" + actualtab + "]");
					if (obj.parent().children('input:submit[value=Guardar], input:submit[value=Grabar]').length > 0) {
						submit = true;
						break;
					}
					actualtab++;
					if (actualtab >= tabindex)
						actualtab = 1;

					obj = $("[tabindex=" + actualtab + "]");
					var dis = obj.attr('disabled'), ro =  obj.attr('readonly');
					follow = dis && ro;
				} while (follow);
				if (!submit){
					$controlPrevio = $("[tabindex=" + (actualtab -1) + "]");
					eventosPrevios = $controlPrevio.data('events');
					
					if(eventosPrevios['blur']){
						$controlPrevio.trigger('blur');
					}
					// if(eventosPrevios['change']){
						// $controlPrevio.trigger('change');
					// }
					
					$("[tabindex=" + actualtab + "]").focus();
					e.preventDefault();
					return false;
				} 
			}
		}
	}); */
}); /*------------------------------------------------------------------------------------*/


/*-------------------------INICIO DE EVENTOS DE PAGINA--------------------------------*/
function onLoadApp () {
	//focus al primer input habil disponible
	$(":input[tabindex=1]:not(.noFocus)").focus();

	//REEMPLAZO DE CONFIRM PARA BORRADO DE DATOS EN ENLACES
	$a_delete = $('a[href*="/delete/"],a[href*="/cancel/"],a[href*="/process/"],a[href*="/cierreFacturacion"],a[href*="/deletecanasta"],a[href*="/generar_asiento_reposicion/"]');
	//verifica si existen enlaces
	if ($a_delete.length) {
		$a_delete
		//quitando el evento onclick que fue añadido por CakePHP
		.removeAttr('onclick')
		//agregando el evento click
		.click(function(e) {
			e.preventDefault();
			href = $(this).attr('href');
			$('<div>¿SEGURO DESEA REALIZAR ESTA ACCION?</div>').dialog({
				title: 'SCMC:Confirmación',
				modal: true,
				buttons: {
					Cancelar: function() {
						$(this).dialog('close');
						return false;
					},
					Aceptar: function() {
						$(this).dialog('close');
						if ($.trim(href) != '') window.location = href;
						else
						return true;
					}
				}
			});
		});
	}

	//REEMPLADO DE CONFIRM PARA BORRADO DE DATOS EN FORMULARIOS POR LOTES
	$submit_borrar_cancelar = $('input:submit.btnerase,input:submit.btncancel,input:submit.btnchkcobrado,,input:submit.btnchkextorna');
	if ($submit_borrar_cancelar.length) {
		$submit_borrar_cancelar.removeAttr('onclick').click(function(e) {
			e.preventDefault();
			if (verifica_checks()) {
				$boton = $(this);
				$('<div>¿SEGURO DESEA REALIZAR ESTA ACCION?</div>').dialog({
					title: 'SCMC:Confirmación',
					modal: true,
					buttons: {
						Cancelar: function() {
							$(this).dialog('close');
						},
						Aceptar: function() {
							$(this).dialog('close');
							$process = $('form[action*="/delete"]');
							if ($process.length) {
								$process.submit();
							}							
							$process = $('form[action$="/process"]');
							if ($process.length) {
								//agregando objetos ocultos para reemplazar el valor que no se envía por el mismo clic del botón
								if ($boton.hasClass('btncancel')) {
									$process.prepend('<input type="hidden" name="cancel" value="Anular" />');
								} else if ($boton.hasClass('btnerase')) {
									$process.prepend('<input type="hidden" name="delete" value="Eliminar" />');
								} else if ($boton.hasClass('btnchkcobrado')) {
									$process.prepend('<input type="hidden" name="extracto" value="Extracto" />');
								} else if ($boton.hasClass('btnchkextorna')) {
									$process.prepend('<input type="hidden" name="extornar" value="Extornar" />');
								}
								$process.submit();
							}
							//fake_ajax(5000);
						}
					}
				});
			}
		});
	}
}

$(function() {
	shortcut_rebind();
	onLoadApp();
});

/*EXTENSIONES PARA HELPERS*/
/*TextDateHelper*/

function TextDateHelperFn(event, element) {
	var el = $(element);

	function msg(msg) {
		if (!alerta) {
			alert('SCMC::Validación\n-------------------------\n\t' + msg);
		} else {
			if (window['alertaTextDateHelperFn']) {
				$.gritter.remove(window['alertaTextDateHelperFn']);
			}
			window['alertaTextDateHelperFn'] = alerta(msg);
		}
	}

	switch (event.type) {
		case 'focusin':
			if (el.attr('enablecero') && element.value == '00/00/0000') {
				element.value = '';
			} else {
				el.select();
			}
			break;
		case 'change':
		case 'focusout':
			var value,
				vals = el.siblings(':hidden[id^=' + element.id + ']');
				
			if (element.value.length > 0) {
				value = parseDate(element.value);
			}
	
			if (value) {
				el.val(value);
				vals.filter('[id$=Day]').val(value.split('/')[0]);
				vals.filter('[id$=Month]').val(value.split('/')[1]);
				vals.filter('[id$=Year]').val(value.split('/')[2]);
			} else if (el.attr('enablecero') && !value) {
				element.value = '00/00/0000';
				vals.filter('[id$=Day]').val('00');
				vals.filter('[id$=Month]').val('00');
				vals.filter('[id$=Year]').val('0000');
			} else {
				element.value = '';
				msg('formato de fecha incorrecta');
			}
		break;
	}
}
$(function() {
	$('.TextDateHelper').bind('change.TextDateHelper', function(e) {
		TextDateHelperFn(e, this);
	}).live('focusin.TextDateHelper focusout.TextDateHelper', function(e) {
		TextDateHelperFn(e, this);
	});
});

//----------------funcionalidad para llamadas ajax hechas x el helper 'codigo'------------------------------------
var override_codigo_helper_xhr = false,
	codigo_helper_xhr = {
		activo: false,
		inputs: []
	};

function _xhr_validate() {
	codigo_helper_xhr.activo = false;
	codigo_helper_xhr.inputs = [];

	function msg(msg, title, type) {
		if (!alerta) {
			alert(title + '\n\n\t' + msg);
		} else {
			if (window['alerta_xhr_validate']) {
				$.gritter.remove(window['alerta_xhr_validate']);
			}
			window['alerta_xhr_validate'] = alerta(msg, title, type);
		}
	}
	for (var i in window) {
		if (i.substr(-3) == 'XHR') {
			if (window[i] && window[i].readyState != 4) {
				codigo_helper_xhr.activo = true;
				codigo_helper_xhr.inputs[codigo_helper_xhr.inputs.length] = i.substr(i.length - 3);
			}
		}
	}
	if (codigo_helper_xhr.activo && !override_codigo_helper_xhr) {
		if (!$('div.gritter-item:contains(por favor aguarde unos segundos a que terminen las llamadas remotas)').length) {
			msg('por favor aguarde unos segundos a que terminen las llamadas remotas', 'SCMC::Validacion', 'Critical');
		}
		return false;
	}
}

$(function() {
	if (systemFunctions.esperarAjax) {
		$('form').bind('submit.xhr_validate', _xhr_validate);
		$('input:submit[value=Guardar]').bind('click.xhr_validate', _xhr_validate);
	}
});

//-------------------------------------------------------------------------------------------------
//MENU FLOTANTE

function construct_floating_menu() {
	if (localStorage['leftPanel'] && localStorage['leftPanel'] != 'null') {
		$('<style>.-hidden{display:none;}#leftPanel{padding-right:5px;-moz-box-shadow:0 0 1em gray;-webkit-box-shadow:0 0 1em gray;box-shadow:0 0 1em gray}#leftPanel #acc1 div a{clear: left;display: block;margin-left: -20px;}#leftPanel ul li{position: relative;clear:left;cursor:pointer;float:left;left: -35px;list-style-type: none;width: 150px;}</style>').appendTo('head');

		$('<div id="leftPanel" style="opacity:0.6;background-color:#0B4B84;position:absolute;left:0px;top:20px;width:15px;height:60px;overflow:auto;" class="ui-corner-right" />').html(localStorage['leftPanel']).appendTo('body').find('#acc1').accordion({
			autoHeight: false,
			change: function() {
				localStorage['leftPanel'] = $('#leftPanel').html();
			}
		}).end().find('#acc1 div a,#acc1 div ul li a').hover(function() {
			$(this).addClass('ui-state-hover').css({
				'font-weight': 'normal'
			});
		}, function() {
			$(this).removeClass('ui-state-hover');
		}).end().find('h3:first').addClass('ui-accordion-header ui-helper-reset ui-state-active ui-corner-top').end().find('#acc1 div a').click(function() {
			var href = $(this).attr('href');
			href = href.substring(href.length - 1);
			if (href == '#') {
				$(this).next(this).toggle(100);
				return false;
			}
		}).end().find('*:visible').addClass('-hidden').hide().end().click(function() {
			$(this).stop().animate({
				width: '220px',
				height: '600px',
				backgroundColor: '#FFFFFF',
				opacity: '1'
			}, 'normal', function() {
				$(this).find('.-hidden').removeClass('-hidden').show().end();
			});
		}).mouseleave(function() {
			$(this).find('*:visible').addClass('-hidden').hide().end().stop().animate({
				width: '15px',
				height: '60px',
				backgroundColor: '#0B4B84',
				opacity: '0.6'
			}, 'normal');
		});
		// .hover(function(){
		// $(this)
		// .stop()
		// .animate({
		// width:'220px',
		// height:'600px',
		// backgroundColor:'#FFFFFF',
		// opacity:'1'
		// },'normal',function(){
		// $(this)
		// .find('.-hidden').removeClass('-hidden').show().end()
		// });
		// },function(){
		// $(this)
		// .find('*:visible').addClass('-hidden').hide().end()
		// .stop()
		// .animate({
		// //width:'20px',
		// width:'15px',
		// height:'100px',
		// backgroundColor:'#0B4B84',
		// opacity:'0.6'
		// },'normal');
		// });

		//load report dialogs
		$.getScript(_WEB_ROOT + 'js/home-dialogs.js');
	}
}

function build_menu() {
	if (!systemFunctions.buildMenuOffHome) {
		return false;
	}
	if (localStorage['tipoIngresos'] && localStorage['tipoSalidas'] && localStorage['tipoTransferencias'] && localStorage['tipoDocumentos'] && localStorage['almacenes'] && localStorage['tipoProduc']) {
		window.tipoIngresos = JSON.parse(localStorage['tipoIngresos']);
		window.tipoSalida = JSON.parse(localStorage['tipoSalidas']);
		window.tipoTransferencias = JSON.parse(localStorage['tipoTransferencias']);
		window.tipoDocumentos = JSON.parse(localStorage['tipoDocumentos']);
		window.almacenes = JSON.parse(localStorage['almacenes']);
		window.almacenes_locales = JSON.parse(localStorage['almacenes_locales']);
		window.tipoProduc = JSON.parse(localStorage['tipoProduc']);
		window.depositos = JSON.parse(localStorage['depositos']);
	}

	if (!$.fn.adcReport) {
		$.getScript(_WEB_ROOT + 'js/jquery.adc_report.js', function() {
			construct_floating_menu();
		});
	} else {
		construct_floating_menu();
	}
}

//LOGOUT
$(function() {
	$('.cerrarSesion a').click(function(e) {
		playSound(_WEB_ROOT+'ogg/exit.ogg');
		localStorage.clear();
	});

	//verificando si está en linea
	$(window).bind('online offline', function(e) {
		status = navigator.onLine ? "Online" : "Offline";
		if (status == 'Offline') {
			$('#navigator').animate({
				backgroundColor: '#ff6666'
			}, 1500);
			//alerta('la aplicación no cuenta con conexion al servidor','SCMC::Error de conexion','Critical');
			alert('SCMC::Error de conexion\n--------------------------------------\n\tLa aplicación no cuenta con conexion al servidor\n\tPor favor no cambie de página mientras se restablece la comunicación.');
			$('.actions').hide();
		} else {
			$('#navigator').css('backgroundColor', 'transparent');
			$('.actions').show();
		}
	});
});

//VALIDANDO QUE EL USUARIO NO HAYA CAMBIADO DE ALMACEN EN OTRA VENTANA
$(function() {
	if (systemFunctions.actualizarPaginasOnCambiarUbicacion) {
		$(window).focus(function() {
			if (window.almacenes && localStorage.almacenes) {
				if (JSON.stringify(almacenes) !== localStorage.almacenes) {
					alerta('La página se cargará de nuevo pues se detectó cambio de almacen en otra página', 'info');
					location.reload();
				}
			}
		});
	}
});

//CAMBIAR UBICACION
var _ubicacion_timeout;

function launch_ubicacion_select_timeout(just_clear) {
	if (_ubicacion_timeout) {
		clearTimeout(_ubicacion_timeout);
	}
	if (just_clear == true) return true;
	_ubicacion_timeout = setTimeout(function() {
		$('.ubicacion .ui-icon-close').click();
	}, 4000);
}

$(function() {
	if (systemFunctions.cambiarUbicacion) {
		$('.ubicacion').dblclick(function() {
			if (localStorage.selector) {
				$(this).css('cursor', 'pointer').data('ubicacion', $('.ubicacion').html()).html(localStorage.selector).css('padding', '0px').find('tr').append('<td><span class="ui-icon ui-corner-all ui-icon-close" title="Cerrar"></span></td>').end().find('.ui-icon-close').css('cursor', 'pointer').bind('mouseenter mouseleave', function() {
					$(this).toggleClass('ui-state-hover');
				}).click(function() {
					$('.ubicacion').removeAttr('style').html($('.ubicacion').data('ubicacion'));
				}).end().find('*').css('font-size', '0.97em').end().find('img').remove().end().find('.datepicker').removeClass('hasDatepicker').removeAttr('id').datepicker({
					dateFormat: 'dd/mm/yy',
					buttonImage: _WEB_ROOT + 'img/calendar.png',
					buttonImageOnly: true,
					duration: '',
					showOn: 'button',
					changeMonth: true,
					changeYear: true,
					dayNamesMin: ['Dom', 'Lun', 'Mar', 'Mi&eacute;', 'Jue', 'Vie', 'Sab'],
					monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Set', 'Oct', 'Nov', 'Dic'],
					onSelect: function(sel_date) {
						$(this).siblings('input').val(sel_date).change();
					},
					beforeShow: function() {
						launch_ubicacion_select_timeout(true);
						$(this).val($(this).siblings('input').val());
						return {};
					}
				}).end().find('#EmpresaEmpresaId').change(function() {
					launch_ubicacion_select_timeout(true);
					if (window['alertaEmpresaEmpresaId']) {
						$.gritter.remove(window['alertaEmpresaEmpresaId']);
					}
					window['alertaEmpresaEmpresaId'] = alerta('Cargando datos...', 5000);

					$.post(_WEB_ROOT + 'home/ajax', {
						action: 1,
						value: $(this).val()
					}, function(data) {			
						console.log(data);
						var item = '<option value="$1">$2</option>\n';
						var res = item.replace('$1', '-1" selected="selected').replace('$2', '-Seleccione-');
						for (var i = 0; i < data.length; i++) {							
							if (data[i] != undefined) {
								res += item.replace('$1', data[i].CentroDist.id).replace('$2', data[i].CentroDist.descripcion);
							}
						}
						$('#EmpresaCentroDistId').html(res);
						launch_ubicacion_select_timeout();
					});
				}).end().find('#EmpresaCentroDistId').find('option').removeAttr('selected').removeClass('selected').end().prepend('<option value="-1" selected="selected">-seleccione-</option>').change(function() {
					if (window['alertaEmpresaCentroDistId']) {
						$.gritter.remove(window['alertaEmpresaCentroDistId']);
					}
					window.alertaEmpresaCentroDistId = alerta('Atención se recargará la página para actualizar los datos', 5000);

					launch_ubicacion_select_timeout();
					$.post(_WEB_ROOT + 'home/ajax', {
						action: 2,
						value: $(this).val()
					}, function(data) {
						window.almacenes = JSLINQ(data).Select(function(i) {
							return {
								'value': i.Almacene.id,
								'text': i.Almacene.codigo + ' ' + i.Almacene.descripcion
							};
						}).items;
						localStorage.almacenes = JSON.stringify(almacenes);
						$.post(_WEB_ROOT + 'home/ajax', {
							action: 5
						}, function(data) {
							window.almacenes_locales = JSLINQ(data).Select(function(i) {
								return {
									'value': i.Almacene.id,
									'text': i.Almacene.codigo + ' ' + i.Almacene.descripcion
								};
							}).items;
							localStorage.almacenes_locales = JSON.stringify(almacenes_locales);
							window.location = window.location.href;
						});
					});
				}).end().find('#EmpresaFecha').change(function() {
					if (window['alertaEmpresaFecha']) {
						$.gritter.remove(window['alertaEmpresaFecha']);
					}
					window['alertaEmpresaFecha'] = alerta('Atención se recargará la página para actualizar los datos', 5000);
					launch_ubicacion_select_timeout();
					$.post(_WEB_ROOT + 'home/ajax', {
						action: 3,
						value: $(this).val()
					}, function(data) {
						window.location = window.location.href;
					});
				}).end();
				launch_ubicacion_select_timeout();
			}
		});
	}

});

//CAMBIAR PLANILLA
var _planilla_timeout;

function launch_planilla_select_timeout(just_clear) {
	if (_planilla_timeout) {
		clearTimeout(_planilla_timeout);
	}
	if (just_clear == true) return true;
	_planilla_timeout = setTimeout(function() {
		$('.planilla .ui-icon-close').click();
	}, 4000);
}

$(function() {
	if (systemFunctions.cambiarPlanilla) {
		$('.planilla').dblclick(function() {
			if (localStorage.selectorPlanilla) {
				$(this)
				//                            .css('cursor','pointer')
				.data('planilla', $('.planilla').html()).html(localStorage.selectorPlanilla).css('padding', '0px').css('width', '280px').find('tr').append('<td><span class="ui-icon ui-corner-all ui-icon-close" title="Cerrar"></span></td>').end().find('.ui-icon-close').css('cursor', 'pointer').bind('mouseenter mouseleave', function() {
					$(this).toggleClass('ui-state-hover');
				}).click(function() {
					$('.planilla').html($('.planilla').data('planilla')).css('text-align', 'right').css('width', '280px');
				}).end().find('*').css('font-size', '0.97em').end().find('img').remove().end().find('#EmpresaClasePlanillaId').find('option').removeAttr('selected').end().prepend('<option value="-1" selected="selected">-seleccione-</option>').change(function() {
					launch_planilla_select_timeout(true);
					if (window['alertaEmpresaClasePlanillaId']) {
						$.gritter.remove(window['alertaEmpresaClasePlanillaId']);
					}
					window['alertaEmpresaClasePlanillaId'] = alerta('Cargando datos...', 5000);

					launch_planilla_select_timeout();
					$.post(_WEB_ROOT + 'home/ajax', {
						action: 7,
						value: $(this).val()
					}, function(data) {
						window.location = window.location.href;
					});
				}).end().find('#EmpresaTipoPlanillaId').find('option').removeAttr('selected').end().prepend('<option value="-1" selected="selected">-seleccione-</option>').change(function() {
					if (window['alertaEmpresaTipoPlanillaId']) {
						$.gritter.remove(window['alertaEmpresaTipoPlanillaId']);
					}
					window['alertaEmpresaTipoPlanillaId'] = alerta('Atención se recargará la página para actualizar los datos', 5000);

					launch_planilla_select_timeout();
					$.post(_WEB_ROOT + 'home/ajax', {
						action: 8,
						value: $(this).val()
					}, function(data) {
						window.location = window.location.href;
					});
				}).end();

				launch_ubicacion_select_timeout();
			}
		});
	}

});

//funcion para ocultar/mostrar mayor espacio en pantallas de menores dimensiones
function onresize(event, ui){
	if(localStorage.hidePanelsOnResize){
		systemFunctions.hidePanelsOnResize = localStorage.hidePanelsOnResize;
	}
	
	if(systemFunctions.hidePanelsOnResize){
		if($(this).height() < 600){
			$('#cabecera').hide('slow');        
			$('#shortcuthint').hide('slow');
			$('#switcher').hide('slow');
			if($('div.actions').length > 1){
				$('div.actions:eq(1)').hide('slow');
			}                        
		} else {                
			$('#cabecera').show('slow');        
			$('div.actions:eq(1)').show('slow');
			$('#shortcuthint').show('slow');
			$('#switcher').show('slow');
		}
	}
    
};
$(function(){
	window.onresize();
}); 

//cargar un enlace en una ventana modal
$(function(){
	$('a.loadPage').die('.loadPage').live('click.loadPage',function(e){
		$this = $(this).attr('target','_blank');
		url = this.href;
		title = $(this).attr('title')||'SCMC';
		
		//si se presionó la tecla Control, dejamos pasar el enlace normalmente
		if(!e.ctrlKey){
			e.preventDefault();
			
			window.childwin = $('<div class="loadPageDocument"><center><img src="'+_WEB_ROOT+'img/ajax2_1.gif" alt="...cargando"><h1 class="ui-widget-header ui-state-active ui-corner-all">CARGANDO<h1></center></div>')
				.dialog({
					width:300,
					//height:200,
					height:'auto',
					modal:true,
					position:'center',
					title:title,
					open:function(){
						$dialog = $(this);
						window.childwinXHR = $.get(url, {}, function(data){
							$dialog.html(data);
							childwin.dialog('option','width',1000);
							$dialog.find('h2').addClass('ui-widget-header ui-state-active ui-corner-top').end()
								.find('.actions,.cake-sql-log').remove();
							
							childwin.dialog('option','position','center');
						});
					},
					buttons:{
						'Cerrar':function(){
							$(this).dialog('close');
						}
					},
					close:function(){
						if(window.childwinXHR){
							childwinXHR.abort();
						}
						window.childwin.dialog('destroy').remove();
					}
				});
		}
	});
});

menuOpciones = new Array();
function menuShortCut(item){	
	$foco = true;
	if(item == ''){ return true;}
	if(item == 0){
		menuSelect.click();
		menuOpciones.pop();		
		if(menuOpciones.length != 0){
			menuSelect = menuOpciones[menuOpciones.length-1];			
		} else{
			menuSelect = null;
		}
		return true;
	}
    item = item -1;    
    if(menuSelect == null){    
        menuSelect = $('h3[role*=tab]:eq('+item+')');
        menuSelect.click();
        menuOpciones = new Array();
    } else {
        menuTemporal = menuSelect.siblings('div:visible').find('a[href=#]:visible:eq('+item+')');
        if(menuTemporal.length == 0){
            menuTemporal = menuSelect.siblings('ul:visible').find('li a:visible:eq('+item+')');
            if(menuTemporal.length == 0){
                menuSelect = menuTemporal;
                if(menuSelect.attr('tag') == 'hasWindows' || menuSelect.siblings('ul').length == 0){
                    menuSelect.click();
                } else {
                	if(menuSelect.attr('href') != undefined && menuSelect.attr('href') != '#'){
                        window.location.href = menuSelect.attr('href');
                    }
                }
            } else {
                menuSelect = menuTemporal;
                if(menuSelect.attr('tag') != 'hasWindows' && menuSelect.siblings('ul').length == 0 ){
                    if(menuSelect.attr('href') != undefined && menuSelect.attr('href') != '#'){
                        window.location.href = menuSelect.attr('href');                    	
                    }
                } else {
                	if(menuSelect.attr('tag') == 'hasWindows'){
                		menuSelect.adcReport('show');
                		return true;
                	} else {
                		menuSelect.click();
                	}
                	
                }
            }
        } else {
            menuSelect = menuTemporal;
            if(menuSelect.attr('tag') == 'hasWindows'){
            	menuSelect.adcReport('show');
        	} else {
        		menuSelect.click();
        	}
        }
    }
    if(menuSelect.length){
    	menuOpciones.push(menuSelect);	
    } else {
    	menuSelect = menuOpciones[menuOpciones.length -1];
    	alerta("No hay mas opciones en el menu");
    }  
    $('#textMenu').focus();
	$('#textMenu').select();
    return menuSelect;
}
function fullScreen(){
	$('#contenido').css({width:'100%'});
	$('#central').css({width:'100%'});
	$('#contenedor').css({width:'100%'});
	$('#titlebar').css({width:'100%'});
}
var menuSelect = null;
$(function(){
	validar();
});